//
//  main.c  （文件名）
//  Day.1   （工程名）
//
//  Created by dllo on 16/5/5.  （创建人和日期）
//  Copyright © 2016年 lanou. All rights reserved.   （版权归属）


// 单行注释   commond + /
// 注释不参与代码的编译
// 1.注释方便开发人员的沟通
// 2.逻辑的一些提示，编程思想的展示
// 3.调试（调错）

/*
    多行注释
    折叠代码：commond + alt + 方向键 （←或→）
 */



#include <stdio.h>
// 导入基础库

// main函数程序的入口  main函数在一个程序里只能有一个
int main(int argc, const char * argv[]) {
   /*
#pragma mark - 进制
    // 十进制转N进制：连除倒取余
    
    // N进制转十进制：按位求和
    
    // 二进制转八进制：三位二进制代表一位八进制
    
    // 二进制转十六进制：四位二进制数代表一位十六进制数
    
    // 不足位补0
    
#pragma mark - 数据类型
    // 基本数据类型
    // 整型（int）：又分为短整型（short）、整型（int）、长整型（long）
    // 浮点型（实型）：又分为单精度浮点型（float）和双精度浮点型（double）
    // 字符型（char）：用单引号‘’括起来的
    
    // int   4个字节
    // float 4个字节
    // char  1个字节
    
    // 1B字节（Byte） = 8个bit
    // 1KB = 1024B
    // 1MB = 1024KB
    // 1GB = 1024MB
    // 1T = 1024GB
    
#pragma mark - 常量
    // 什么是常量：在程序运行的过程中不会被修改的数据
    
    // 整型常量：
    // 十进制：  10、100、1000
    // 八进制：  开头加0代表八进制  015
    // 十六进制： 开头加0x  0x12
    // 二进制： 开头加0b  0b1011
    // 浮点型常量：
    // 单精度浮点型常量：10.1f  默认的是双精度、加上f表示的是单精度
    // 字符型常量：'A'、'B'  \n  \t  \\
    
#pragma mark - 变量
    // 标识符 ：程序员在程序中自己起的名字。
    // 命名规则 ：
    // 1.只能由数字、字母、下划线组成。而且数字不能开头
    // 2.不能重名，不能与系统关键字重名
    // 3.严格区分大小写，比如test和Test是两个标识符
    // 规范：
    // 1.见名知意
    // 2.驼峰命名法（除第一个单词外每个单词的首字母大写）
    //   例如：sendMessageNumber
    // 变量：数据类型 变量名（标识符） =（赋值符号） 初始值
    // 变量：经常修改或者不确定的数据，使用变量
    // 定义一个变量 ：
    // 定义变量的目的：在内存中开辟一块存储空间，用来存放数据
    // 初始化：第一次赋值
    // 为什么要初始化：
    // 1.错误数据
    // 2.系统使用时留下的数据
    // 注意：变量在使用前一定要定义
    int a = 10;//（定义的同时初始化）    // 先定义，再初始化
    int b;
    b = 10;
    
    // 部分初始化
    int c, d = 10;//连续定义 变量之间用逗号隔开
    // 红色的叹号代表错误   程序不能正常运行
    // 黄色的叹号代表警告，一般情况下不影响程序的正常运行
    
    // 代码规范
    // 逗号后边要有空格，运算符两边都要加空格
    
    // 修改变量的值
    
    int f = 10;
    f = 20;
    
    // 将一个变量的值赋给另一个变量
    int t;
    t = f;
    */
#pragma mark - 运算符
    // 赋值运算符 =   =号右边的值，赋给=号左边，赋值运算符的优先级比较低的
    // ()[] 优先级最高
    // 练习：交换两个整型变量的值
   /* int a = 10;
    int b = 5;
    
    int temp = 0;
    temp = a;
    a = b;
    b = temp;
    */
    // commond + \ (断点)
    // commond + R (运行)
    // commond + B (编译)
    
    // 算术运算符： + - * / % ++ --
    int a = 10, b = 5;
    // a + b -> 15
    // a - b -> 5
    // a * b -> 50
    // a / b -> 2
    // a % b -> 0
    
    
    b = a++;
    b = ++a;
    // ++在后先取值再++
    // ++在后先++再取值
    
    // 复合运算符
    // += -= *= /= %=
    // a += b -> a = a + b
    // a -= b -> a = a - b
    //两个运算符之间不能有空格
    
    printf("*\n");
    printf("*");
    printf("*\n");
    printf("*");
    printf("*");
    printf("*\n");
#pragma mark - 表达式
    // 表达式：由常量、变量、运算符组合而成。
    // 表达式一定有结果。
    // 上下移动 commond + alt + 【 或 】
    // 左右移动 commond + 【 或 】

    
#pragma mark - printf scanf
    //printf 是一个标准库函数，能精确的输出。
    //printf("格式控制输出符",输出列表项);
    // %d 或者 %i 输出的是整型
    // %f 默认保留小数点后6位   前7位为有效数字
    // %lf 默认保留小数点后6位   前15位为有效数字
    
    int s = 5;
    printf("%04d", s);
    // 输出位数4位，不足位补0
    // - 表示左对齐
    printf("%-4d!!!\n",s);
    double test = 3.141592653565;
    printf("%.12lf\n", test);
    
    // %C 字符型
    // \n 回车
    // %% %
    // \" "
    // \t tab
    
    // 可以连续输出，每一个输出列表项之间用逗号隔开，输出列表项可以是常量、变量、表达式
    printf("%d%d%d",1,2,3);
    
    int t = 0;
    scanf("%d\n",&t);
    printf("%d\n",t);
    
    float height = 0; //身高
    int age = 0; //年龄
    char sex = 'a'; //性别
    
    scanf("%f,%d,%c",&height,&age,&sex);
    // 连续输入一定要有标记
    printf("身高 = %.2f,年龄 = %d, 性别 = %c\n", height, age, sex);
    // 一定不要在scanf中加入\n  \n是scanf语句的结束标记
    
    //新建工程 :commond + shift + n
    
    return 0;
}
